﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 选择文件路径按钮点击事件
        /// </summary>
        /// <param name="sender">事件源</param>
        /// <param name="e">事件参数</param>
        private void button2_Click(object sender, EventArgs e)//选择文件路径
        {
            // 使用FolderBrowserDialog选择文件夹
            using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
            {
                // 设置对话框属性
                folderDialog.Description = "请选择文件夹"; // 对话框描述文字
                folderDialog.ShowNewFolderButton = true; // 显示新建文件夹按钮
                folderDialog.RootFolder = Environment.SpecialFolder.Desktop; // 从桌面开始浏览

                // 如果用户点击了确定按钮
                if (folderDialog.ShowDialog() == DialogResult.OK)
                {
                    // 将选择的路径显示在textBox1中
                    textBox1.Text = folderDialog.SelectedPath;
                }
            }
        }

        /// <summary>
        /// 生成Word文档按钮点击事件
        /// </summary>
        /// <param name="sender">事件源</param>
        /// <param name="e">事件参数</param>
        private void button1_Click(object sender, EventArgs e)//获取所有子文件夹名字并生成Word文档
        {
            // 检查文本框中的路径是否为空或不存在
            if (string.IsNullOrEmpty(textBox1.Text) || !Directory.Exists(textBox1.Text))
            {
                MessageBox.Show("请先选择有效的文件夹路径！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return; // 退出方法
            }

            try
            {
                // 获取当前路径下所有子文件夹的路径
                string[] directories = Directory.GetDirectories(textBox1.Text);

                // 如果没有子文件夹，提示用户
                if (directories.Length == 0)
                {
                    MessageBox.Show("该文件夹中没有子文件夹！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return; // 退出方法
                }

                // 调用生成Word文档的方法
                GenerateWordDocument(directories, textBox1.Text);

                // 显示成功消息
                MessageBox.Show($"成功生成Word文档！共找到 {directories.Length} 个子文件夹。", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                // 捕获并显示异常信息
                MessageBox.Show($"生成文档时出错：{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// 生成Word文档的方法
        /// </summary>
        /// <param name="directories">子文件夹路径数组</param>
        /// <param name="parentPath">父文件夹路径</param>
        private void GenerateWordDocument(string[] directories, string parentPath)
        {
            // 创建Word文档对象
            Document doc = new Document();
            // 添加文档章节
            Section section = doc.AddSection();
            // 添加标题段落
            Paragraph titleParagraph = section.AddParagraph();

            // 添加标题文本
            TextRange titleText = titleParagraph.AppendText("产品统计");
            // 设置标题字体格式
            titleText.CharacterFormat.FontName = "微软雅黑"; // 字体
            titleText.CharacterFormat.FontSize = 16; // 字号
            titleText.CharacterFormat.Bold = true; // 粗体
            // 设置标题段落对齐方式
            titleParagraph.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Center;
            // 添加换行符
            titleParagraph.AppendBreak(BreakType.LineBreak);
            titleParagraph.AppendBreak(BreakType.LineBreak);

            // 添加信息段落（生成时间和路径）
            Paragraph infoParagraph = section.AddParagraph();
            // 添加生成时间文本
            TextRange timeText = infoParagraph.AppendText($"生成时间：{DateTime.Now:yyyy年MM月dd日 HH:mm:ss}\n");
            // 设置信息段落对齐方式
            infoParagraph.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Left;
            // 添加统计信息段落

            Paragraph statsParagraph = section.AddParagraph();
            TextRange statsText = statsParagraph.AppendText($"产品统计：共找到 {directories.Length} 个产品");
            statsText.CharacterFormat.FontName = "微软雅黑";
            statsText.CharacterFormat.FontSize = 14;
            statsText.CharacterFormat.Bold = true;
            statsText.CharacterFormat.TextColor = Color.DarkBlue;
            statsParagraph.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Left;
            statsParagraph.AppendBreak(BreakType.LineBreak);
            statsParagraph.AppendBreak(BreakType.LineBreak);



            // 添加分隔线段落
          //  Paragraph lineParagraph = section.AddParagraph();
            // 设置分隔线段落对齐方式
           // lineParagraph.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Center;

            // 提取所有文件夹名称
            List<string> folderNames = new List<string>();
            foreach (string directory in directories)
            {
                DirectoryInfo dirInfo = new DirectoryInfo(directory);
                folderNames.Add(dirInfo.Name);
            }

            // 添加产品号列表段落
            Paragraph productParagraph = section.AddParagraph();

            // 将产品号用逗号隔开
            string productList = string.Join(", ", folderNames);
            TextRange productText = productParagraph.AppendText(productList);

            // 设置产品号字体格式
            productText.CharacterFormat.FontName = "宋体";
            productText.CharacterFormat.FontSize = 12;

            // 设置段落格式
            productParagraph.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Left;
            productParagraph.Format.FirstLineIndent = 0; // 首行缩进为0

          


            // 获取桌面路径
            string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            // 生成文档保存路径，包含时间戳防止重名
            string docPath = Path.Combine(desktopPath, $"产品统计列表_{DateTime.Now:yyyyMMddHHmmss}.docx");

            // 保存文档到指定路径
            doc.SaveToFile(docPath, FileFormat.Docx);

            // 释放文档资源
            doc.Dispose();

            // 询问用户是否立即打开文档
            DialogResult result = MessageBox.Show("Word文档已生成在桌面上！是否立即打开？",
                "完成", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            // 如果用户选择"是"，尝试打开文档
            if (result == DialogResult.Yes)
            {
                try
                {
                    // 使用默认程序打开文档
                    Process.Start(docPath);
                }
                catch (Exception ex)
                {
                    // 如果打开失败，显示错误信息
                    MessageBox.Show($"打开文档时出错：{ex.Message}", "错误",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}